/**
 * 格式化日期为 YYYY-MM-DD
 * @param {string|Date} dateString 日期字符串或日期对象
 * @param {string} fallback 当输入无效时的替代值
 * @returns {string} 格式化后的日期
 */
export function formatDate(dateString, fallback = '') {
  if (!dateString) return fallback;
  
  try {
    const date = new Date(dateString);
    if (isNaN(date.getTime())) return fallback;
    
    return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;
  } catch (e) {
    return fallback;
  }
}

/**
 * 格式化时间为 HH:MM
 * @param {string|Date} dateString 日期字符串或日期对象
 * @param {string} fallback 当输入无效时的替代值
 * @returns {string} 格式化后的时间
 */
export function formatTime(dateString, fallback = '') {
  if (!dateString) return fallback;
  
  try {
    const date = new Date(dateString);
    if (isNaN(date.getTime())) return fallback;
    
    return `${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}`;
  } catch (e) {
    return fallback;
  }
}

/**
 * 格式化日期时间为 YYYY-MM-DD HH:MM:SS
 * @param {string|Date} dateString 日期字符串或日期对象
 * @param {string} fallback 当输入无效时的替代值
 * @returns {string} 格式化后的日期时间
 */
export function formatDateTime(dateString, fallback = '') {
  if (!dateString) return fallback;
  
  try {
    const date = new Date(dateString);
    if (isNaN(date.getTime())) return fallback;
    
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0');
    const day = String(date.getDate()).padStart(2, '0');
    const hours = String(date.getHours()).padStart(2, '0');
    const minutes = String(date.getMinutes()).padStart(2, '0');
    const seconds = String(date.getSeconds()).padStart(2, '0');
    
    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
  } catch (e) {
    return fallback;
  }
}

/**
 * 获取当前日期，格式为 YYYY-MM-DD
 * @returns {string} 当前日期
 */
export function getCurrentDate() {
  const date = new Date();
  return formatDate(date);
}

/**
 * 给日期添加天数
 * @param {string|Date} dateString 日期字符串或日期对象
 * @param {number} days 要添加的天数，可以为负数
 * @returns {string} 新的日期字符串，格式为 YYYY-MM-DD
 */
export function addDays(dateString, days) {
  const date = new Date(dateString);
  date.setDate(date.getDate() + days);
  return formatDate(date);
}

/**
 * 比较两个日期是否是同一天
 * @param {string|Date} date1 第一个日期
 * @param {string|Date} date2 第二个日期
 * @returns {boolean} 是否是同一天
 */
export function isSameDay(date1, date2) {
  if (!date1 || !date2) return false;
  
  const d1 = new Date(date1);
  const d2 = new Date(date2);
  
  return d1.getFullYear() === d2.getFullYear() &&
         d1.getMonth() === d2.getMonth() &&
         d1.getDate() === d2.getDate();
} 